// 将所有的对象转化为迭代器，就可以使用 for...of
Object.prototype[Symbol.iterator] = function* () {
  const arr = Object.entries(this)
  for (const [k, v] of arr) {
    yield [k, v]
  }
} 

let obj1 = { a: 1, b: 2, c: 3 }
for (let [k, v] of obj1) {
  console.log(k, v)
}

// ----------------------------------------------------------
const obj2 = {
  // [Symbol.iterator]: function*() {
  //   yield 1;
  //   yield 2;
  //   yield 3;
  // }
  *[Symbol.iterator]() {
    yield 1;
    yield 2;
    yield 3;
  }
};
for (const x of obj2) {
  console.log(x);
}
// 输出:
// a 1
// b 2
// c 3
// 1
// 2
// 3